package com.cdm.qf.conditions;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

import java.util.Map;

/**
 * 根据指定的类名，判断该类名是否存在于当前项目中
 * 如果指定类存在，就认为条件成立；否则条件不成立
 */
public class OnClassNameCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {

        //获取指定注解中所有的属性键值对；键是属性的名字，值是属性配置的值
        Map<String, Object> annotationAttributes = metadata.getAnnotationAttributes(MyConditionalOnClassName.class.getName());
        String className = (String) annotationAttributes.get("value");

        //判断类是否存在
        try {
            Class.forName(className);
        } catch (ClassNotFoundException e) {
            return false;
        }
        return true;
    }
}
